package gui;

import gui.nodes.AbstractNode;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import utility.Record;

import business.EnseignantBL;
import business.FormationBL;
import business.StatutEnseignantBL;

public class EnseignantUIConsulter extends AbstractViewPane {

	private ViewMode currentViewMode;
	private AbstractNode creator;
	private ComponentList componentList = new ComponentList();
	
	// Champs du formulaire
	private JTextField textFieldNom;
	private JTextField textFieldPrenom;
	private JTextField textFieldTelephone;
	private JTextField textFieldMail;
	private JComboBox comboStatut;
	private JComboBox comboTitre;

	// Valeurs par defaut pour un ajout
	private int id = -1;
	private String nom;
	private String prenom;
	private String mail;
	private String tel;
	private String titreEns = "M";
	private int idStatut = 1;

	public EnseignantUIConsulter(AbstractNode creator, ViewMode v, int enseignantId) {
		this.creator = creator;
		System.out.println("viewmode : " + v);
		this.currentViewMode = v;
		// System.out.println(currentViewMode);
		initGUI(enseignantId);
	}

	@Override
	public String getTitle() {
		System.out.println("consultation : " + currentViewMode);
		if (currentViewMode == ViewMode.CONSULTATION) {
			return "Consultation des informations d'un enseignant";
		} else if (currentViewMode == ViewMode.MODIFICATION) {
			return "Modification des informations d'un enseignant";
		} else if (currentViewMode == ViewMode.AJOUT) {
			return "Ajout d'un nouvel Enseignant";
		} else {
			return "probleme avec le viewmode";
		}
	}

	/*
	 * probleme car le getTitle de AbstractViewPane est appelé trop tôt, le
	 * currentViewMode n'est pas encore affecté donc on passe tout le temps dans
	 * le else
	 */

	@Override
	public boolean hasBeenModified() {
		return (currentViewMode != ViewMode.CONSULTATION);
	}
	
	private JComboBox makeStatutComboBox(StatutEnseignantBL blStat, int idStatut) {
		JComboBox comboStatut = new JComboBox();

		for (Record recStatut : blStat.getListeStatutEnseignant()) {
			// On va selectionner le statut qui correspond au statut de la base
			if (recStatut.getId() == idStatut) {
				comboStatut.addItem(recStatut);
				comboStatut.setSelectedItem(recStatut);
			} else {
				comboStatut.addItem(recStatut);
			}
		}
		
		return comboStatut;
	}

	private JComboBox makeTitreComboBox(EnseignantBL ens, String titreEns) {
		JComboBox comboTitre = new JComboBox();

		for (String nomTitre : ens.getListeTitreEnseignant()) {
			// on selectionne le titre enseignant correspondant à celui de la base
			if (nomTitre.equals(titreEns)) {
				comboTitre.addItem(nomTitre);
				comboTitre.setSelectedItem(nomTitre);
			} else {
				comboTitre.addItem(nomTitre);
			}
		}
		
		return comboTitre;
	}
	
	private void showCommandBox() {
		JPanel commandBox = new JPanel();
		JButton save = new JButton("Enregistrer"); componentList.add(save);
		save.setActionCommand("Enregistrer");
		save.addActionListener(new EnseignantListener());
		commandBox.add(save);
		drawCommandBox(commandBox);
	}
	
	private void initGUI(int enseignantId) {

		StatutEnseignantBL blStat = new StatutEnseignantBL();
		EnseignantBL enseignantBL = new EnseignantBL(enseignantId);
		
		// Charger le contenu des champs si on est en consultation ou
		// en modification
		if (currentViewMode != ViewMode.AJOUT) {
			id = enseignantId;
			titreEns = enseignantBL.getTitreEnseignant();
			nom = enseignantBL.getNomEnseignant();
			prenom = enseignantBL.getPrenomEnseignant();
			tel = enseignantBL.getTelEnseignant();
			mail = enseignantBL.getMailEnseignant();
			idStatut = enseignantBL.getIdStatutEnseignant();
		}

		// Create and populate the panel.
		JPanel p = new JPanel(new SpringLayout());
		
		JLabel titre = new JLabel("Titre : ", JLabel.TRAILING);
		comboTitre = makeTitreComboBox(enseignantBL, titreEns);
		componentList.add(comboTitre);
		p.add(titre); p.add(comboTitre);

		JLabel lnom = new JLabel("Nom : ", JLabel.TRAILING);
		textFieldNom = new JTextField(nom); 
		componentList.add(textFieldNom);
		p.add(lnom); p.add(textFieldNom); 
		
		JLabel lprenom = new JLabel("Prénom : ", JLabel.TRAILING);
		textFieldPrenom = new JTextField(prenom); 
		componentList.add(textFieldPrenom);
		p.add(lprenom); p.add(textFieldPrenom);
		
		JLabel ltelephone = new JLabel("Téléphone : ", JLabel.TRAILING);
		textFieldTelephone = new JTextField(tel); 
		componentList.add(textFieldTelephone);
		p.add(ltelephone); p.add(textFieldTelephone);
		
		JLabel lmail = new JLabel("Mail : ", JLabel.TRAILING);
		textFieldMail = new JTextField(mail); 
		componentList.add(textFieldMail);
		p.add(lmail); p.add(textFieldMail);

		JLabel statut = new JLabel("Statut : ", JLabel.TRAILING);
		comboStatut = makeStatutComboBox(blStat, idStatut);
		componentList.add(comboStatut);
		p.add(statut); p.add(comboStatut);

		// Lay out the panel.
		SpringUtilities.makeCompactGrid(p, 6, 2, // rows, cols le +2
				// pour les 2
				// combobox
				6, 6, // initX, initY
				6, 6); // xPad, yPad

		add(p, BorderLayout.NORTH);

		if (currentViewMode != ViewMode.CONSULTATION) {
			// Mode modification - afficher les boutons
			showCommandBox();
		} else {
			componentList.disableAll();
		}
	}

	// inner class chargée de gérer l'écoute du bouton d'enregistrement du
	// formulaire
	private class EnseignantListener implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			if (arg0.getActionCommand().equals("Enregistrer")) {
				System.out.println("Demande d'enregistrement");
				EnseignantBL ensSave = new EnseignantBL();
				// si -1, c'est un ajout d'enseignant, sinon modification de
				// l'enseignant de l'id concerné
				if (getId() == -1) {
					ensSave.ajouterEnseignant(getId(), getTitre(), getNom(),
							getPrenom(), getTel(), getMail(), getIdStatutEns());
					componentList.disableAll();

				} else {
					ensSave.modifierEnseignant(getId(), getTitre(), getNom(),
							getPrenom(), getTel(), getMail(), getIdStatutEns());
					componentList.disableAll();
				}
				
				// Rafraichir le noeud de l'arbre
				creator.refresh();
				
				// Passer en mode consultation
				componentList.disableAll();
				currentViewMode = ViewMode.CONSULTATION;
			}
		}
	}
	
	// Accesseurs
	public int getId() {
		return id;
	}

	public String getNom() {
		return textFieldNom.getText();

	}

	public String getPrenom() {
		return textFieldPrenom.getText();
	}

	public String getMail() {
		return textFieldMail.getText();
	}

	public String getTel() {
		return textFieldTelephone.getText();
	}

	public String getTitre() {
		return comboTitre.getSelectedItem().toString();
	}

	public int getIdStatutEns() {
		return ((Record) comboStatut.getSelectedItem()).getId();
	}
	
}
